STM32+GM65二维码识别模块

您所在的位置:网站首页 扫描屏幕二维码 说明书 STM32+GM65二维码识别模块

STM32+GM65二维码识别模块

2023-11-22 04:06| 来源: 网络整理| 查看: 265

前言

朋友毕设需要用到扫码模块,但是网上这方面的资源比较少,下载源码还需要收费。所以自己写了一个简单实用的,大家可以来我这下载源码。

功能介绍

本案例主要实现的功能是,GM65扫描到二维码包含的信息后,将信息通过串口传输给32单片机,32单片机再将信息使用OLED显示屏显示出来,同时可以实现扫码开灯、关灯等功能。

主要硬件

STM32F103C8T6最小系统板、GM65二维码识别模块、0.96寸4针OLED显示屏

模块接线

GM65二维码识别模块—接32的串口3 TX—PB11 RX—PB10 VCC—5V GND—GND 4针OLED显示屏 SCL—PA5 SDA–PA7 VCC—3V3 GND—GND

实验效果

当二维码的内容是字符串D1时灯亮,是D0时灯灭。OLED显示屏的第2行显示了二维码的内容。第3行显示灯的开关。 在这里插入图片描述 当二维码的内容是字符串xixihaha时,不会执行开关灯的操作,但也会显示内容在显示屏上。 在这里插入图片描述 程序中,串口3收到二维码信息后会通过串口1返发给PC,故除了可以用显示屏看到效果外,也可以用串口助手看到二维码的内容。 在这里插入图片描述

二维码及模块的一些配置

1、二维码的生成是在微信小程序的草料二维码。 在这里插入图片描述

在这里插入图片描述

2、GM65模块设置成串行通讯模式,同时设置波特率为9600 当模块发出嘀嘀嘀声响时,说明设置成功。 在这里插入图片描述 3、如果觉得模块的灯太亮,声音太大可以按下面扫码设置 在这里插入图片描述 在这里插入图片描述

代码实现

main.c文件

/*=======================main.c======================*/ #include "stm32f10x.h" #include "usart.h" #include "led.h" #include "oled.h" #include "string.h" u8 recv_ok = 0; //接收完成标志 u8 uart_buf[32]={0}; //用于保存串口数据 u8 uart_cnt=0; //用于定位串口数据的位置 int main() { Init_Usart(); //初始化3个串口 led_init(); //初始化LED OLED_Init(); //初始化OLED OLED_Clear(); //OLED清屏 printf("================GM65二维码模块测试=================\r\n"); OLED_ShowString(30,0,(u8*)"GM65 TEST!",16); OLED_Refresh(); while(1) { if(recv_ok==1) //接收完成 { OLED_Clear(); //OLED清屏 OLED_ShowString(30,0,(u8*)"GM65 TEST!",16); //命令判断,当收到D0关灯,D1开灯 if(strstr((char*)uart_buf,"D0")) { GPIO_SetBits(GPIOC,GPIO_Pin_13); //关灯 OLED_ShowString(0,32,(u8*)"LED OFF",16); } else if(strstr((char*)uart_buf,"D1")) { GPIO_ResetBits(GPIOC,GPIO_Pin_13); //开灯 OLED_ShowString(0,32,(u8*)"LED ON",16); } OLED_ShowString(0,16,(u8*)"QRCode:",16); OLED_ShowString(8*7,16,(u8*)uart_buf,16); //显示二维码内容 OLED_Refresh(); //刷新OLED uart_cnt = 0; //最后清零,重新计数 recv_ok = 0; //接收完成标志置0 } } } //串口3中断 void USART3_IRQHandler(void) //串口3中断服务程序 { uint8_t d; //检测标志位 if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET) { //接收数据 d = USART_ReceiveData(USART3); //将接收到的数据依次保存到数组里 uart_buf[uart_cnt++] = d; //GM65模块发完一组数据后会自动发送一个回车符,所以通过检测是否接受到回车来判断数据是否接收完成 if(d == 0x0D) { recv_ok = 1; //接收完成 } //将接收到的数据,通过串口1返发给PC USART_SendData(USART1, d); while( USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); //等待发送完成 USART_ClearFlag(USART1,USART_FLAG_TXE); //清空标志位 USART_ClearITPendingBit(USART3,USART_IT_RXNE); //清空标志位 } } 资源下载

需要源码的可以自行下载。https://github.com/J-CHUN/STM32-GM65.git 下载操作: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3